﻿/*****************************************************************//**
 * @file    GraphModelProvider.h
 * @brief   三维模型可视化数据管理。
 *  
 * @author  ChengHaotian (yeguangbaozi@foxmail.com)
 * @date    2024-06-12
 *********************************************************************/

#ifndef __GRAPHMODELPROVIDER_H__
#define __GRAPHMODELPROVIDER_H__

#include "GraphProviderBase.h"

#include "GraphDataProviderAPI.h"

#include <QHash>

// 前置声明

namespace GraphData
{
    /**
     * @brief   三维可视化数据分类管理类。
     * @author  ChengHaotian (yeguangbaozi@foxmail.com)
     * @date    2024-06-12
     */
    class GRAPHDATAPROVIDERAPI GraphModelProvider : public GraphProviderBase
    {
        Q_OBJECT

        // 友元，防止外部手动创建或析构。
        friend class GraphProviderManager;

    public:
        /**
         * @brief   获取当前算例已实例化的可视化对象。[重写]
         * @return  可视化对象列表。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-06-12
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getCurrentGraphObjs() override;

        /**
         * @brief   获取当前算例已实例化的相机敏感可视化对象。（外部进行局部刷新）[重写]
         * @return  可视化对象列表。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-06
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getCurrentCameraSenGraphObjs() override;

        /**
         * @brief   获取类名。[重写]
         * @return  类名
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-06-12
         */
        QString getClassName() override;

        /**
         * @brief   根据数据ID更新可视化对象，没有则跳出。[虚函数]
         * @param   dataId：数据ID
         * @param   forceUpdate：强制刷新[缺省]
         * @return  是否存在该数据ID所对应可视化对象。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        bool updateObjById(int dataId, bool forceUpdate = false) override;
        /**
         * @brief    根据数据ID获取模型（几何）可视化对象。（没有则创建）
         * @param[i] dataObjId                                      数据ID
         * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-16
         */
        Exchange::FITKAcousticsVTKGraphObject3D* getModelGraphObject(int dataObjId);

        /**
         * @brief   获取全部模型（几何）可视化对象。
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-07-30
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllModelGraphObjects(bool autoCreate = false);
         /**
          * @brief    根据数据ID获取部件网格可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getMeshGraphObject(int dataObjId);

        /**
         * @brief   获取全部部件网格可视化对象。（没有则不创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-10-28
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllMeshGraphObjects(bool autoCreate = false);

        /**
         * @brief   根据SEA模型数据ID获取SEA模型节点可视化对象。（没有则创建）
         * @return  可视化对象
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-10-29
         */
        Exchange::FITKAcousticsVTKGraphObject3D* getDiscNodesGraphObject();
         /**
          * @brief    根据数据ID获取SEA子系统梁可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSEABeamGraphObject(int dataObjId);

        /**
         * @brief   获取全部SEA子系统梁可视化对象。（没有则创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllSEABeamGraphObjects(bool autoCreate = true);
         /**
          * @brief    根据数据ID获取SEA子系统壳（板）可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSEAShellGraphObject(int dataObjId, bool forceUpdate = false);

        /**
         * @brief   获取全部SEA子系统壳（板）可视化对象。（没有则创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllSEAShellGraphObjects(bool autoCreate = true);
         /**
          * @brief    根据数据ID获取SEA子系统声腔可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSEACavityGraphObject(int dataObjId, bool forceUpdate = false);

        /**
         * @brief   获取全部SEA子系统声腔可视化对象。（没有则创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllSEACavityGraphObjects(bool autoCreate = true);
         /**
          * @brief    根据数据ID获取SEA子系统半无限流体可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSEASemiInfFluidGraphObject(int dataObjId);

        /**
         * @brief   获取全部SEA子系统半无限流体可视化对象。（没有则创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-05
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllSEASemiInfFluidGraphObjects(bool autoCreate = true);
         /**
          * @brief    根据数据ID获取SEA子系统可视化对象。（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSEASubSysGraphObject(int dataObjId, bool forceUpdate = false);

        /**
         * @brief   获取全部SEA子系统可视化对象。（没有则创建）
         * @param   autoCreate：自动创建不存在的可视化对象[缺省]
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getAllSEASubSysGraphObjects(bool autoCreate = true);

        /**
         * @brief   获取全部SEA子系统可视化对象。（没有则创建）
         * @param   seaSubSysTypeEnum：SEA子系统类型枚举值
         * @return  可视化对象列表
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> getSEASubSysGraphObjectsByType(int seaSubSysTypeEnum, bool update = true);
         /**
          * @brief    通过id获取FE面了可视化对象（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getFEFaceGraphObject(int dataObjId, bool forceUpdate = false);
         /**
          * @brief    通过id获取FE结构-板子系统了可视化对象（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getFEShellGraphObject(int dataObjId, bool forceUpdate = false);
        /**
         * @brief    通过id获取FE结构-梁子系统了可视化对象（没有则创建）
         * @param[i] dataObjId                                      数据ID
         * @param[i] forceUpdate                                    是否强制刷新
         * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-16
         */
        Exchange::FITKAcousticsVTKGraphObject3D* getFEBeamGraphObject(int dataObjId, bool forceUpdate = false);
         /**
          * @brief    通过id获取FE声腔子系统了可视化对象（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @param[i] forceUpdate                                    是否强制刷新
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getFEAcousticGraphObject(int dataObjId, bool forceUpdate = false);
         /**
          * @brief    通过id获取传感器可视化对象（没有则创建）
          * @param[i] dataObjId                                      数据ID
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getSensorGraphObject(int dataObjId);
        /**
         * @brief    获取全部FE子系统的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getAllFESubSysGraphObjects(bool autoCreate);
        /**
         * @brief    获取全部FE面的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getAllFEFaceGraphObjects(bool autoCreate);
        /**
         * @brief    获取全部FE结构的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getFEStructGraphObjects(bool autoCreate);
        /**
         * @brief    获取全部FE声腔的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getFEAcousticsGraphObjects(bool autoCreate);
        /**
         * @brief    获取全部FE面的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getFEFaceGraphObjects(bool autoCreate);
        /**
         * @brief    获取全部传感器的可视化对象
         * @param[i] autoCreate                                           没有自动创建
         * @return   QList<Exchange::FITKAcousticsVTKGraphObject3D*>      可视化对象列表
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-12-31
         */
        QList<Exchange::FITKAcousticsVTKGraphObject3D*> GraphModelProvider::getAllSensorGraphObjects(bool autoCreate);
         /**
          * @brief    根据数据ID获取对应可视化对象。（没有则不创建）
          * @param[i] dataObjId                                      数据ID
          * @return   Exchange::FITKAcousticsVTKGraphObject3D *      可视化对象
          * @author   BaGuijun (baguijun@163.com)
          * @date     2025-01-16
          */
        Exchange::FITKAcousticsVTKGraphObject3D* getCurrentGraphObjByDataId(int dataObjId);

        /**
         * @brief   设置是否激活双击可拾取对象的拾取状态。[重写]
         * @param   pickable：是否可拾取
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        void setDoubleClickPickable(bool pickable) override;

        /**
         * @brief   设置指定或当前所有实例化几何模型点可拾取。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setGeoVertPickable(int dataObjId = -1);

        /**
         * @brief   设置指定或当前所有实例化几何模型线可拾取。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setGeoEdgePickable(int dataObjId = -1);

        /**
         * @brief   设置指定或当前所有实例化几何模型面可拾取。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setGeoFacePickable(int dataObjId = -1);

        /**
         * @brief   设置指定或当前所有实例化几何模型体可拾取。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setGeoSolidPickable(int dataObjId = -1);

        /**
         * @brief   设置指定或当前所有实例化几何模型所有元素均可拾取。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-07
         */
        void setGeoPickable(int dataObjId = -1);

        /**
         * @brief   关闭指定或当前所有实例化几何模型拾取状态。
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setGeoNonePickable(int dataObjId = -1);

        /**
         * @brief   设置网格单元是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setMeshCellPickable(bool pickable, int dataObjId = -1);

        /**
         * @brief   设置SEA节点是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-01
         */
        void setDiscNodesPickable(bool pickable, int dataObjId = -1);

        /**
         * @brief   设置SEA子系统梁是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        void setSEABeamPickable(bool pickable, int dataObjId = -1);

        /**
         * @brief   设置SEA子系统壳（板）是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        void setSEAShellPickable(bool pickable, int dataObjId = -1);

        /**
         * @brief   设置SEA声腔是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-05
         */
        void setSEACavityPickable(bool pickable, int dataObjId = -1);

        /**
         * @brief   设置SEA半无限流体是否可拾取。
         * @param   pickable：是否可拾取
         * @param   dataObjId：生效数据ID（-1则对所有数据生效）[缺省]
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-05
         */
        void setSEASemiInfFluidPickable(bool pickable, int dataObjId = -1);
        /**
         * @brief    设置FE面拾取状态
         * @param[i] pickable                        是否拾取
         * @param[i] dataObjId                       拾取对象id（默认全部数据）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-09
         */
        void setFEFacePickable(bool pickable, int dataObjId = -1);
        /**
         * @brief    设置FE结构-板拾取状态
         * @param[i] pickable                        是否拾取
         * @param[i] dataObjId                       拾取对象id（默认全部数据）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-09
         */
        void setFEShellsPickable(bool pickable, int dataObjId = -1);
        /**
         * @brief    设置FE结构-梁拾取状态
         * @param[i] pickable                        是否拾取
         * @param[i] dataObjId                       拾取对象id（默认全部数据）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-09
         */
        void setFEBeamsPickable(bool pickable, int dataObjId = -1);
        /**
         * @brief    设置FE声腔拾取状态
         * @param[i] pickable                        是否拾取
         * @param[i] dataObjId                       拾取对象id（默认全部数据）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-09
         */
        void setFEAcousticPickable(bool pickable, int dataObjId = -1);
        /**
         * @brief    设置FE传感器拾取状态
         * @param[i] pickable                        是否拾取
         * @param[i] dataObjID                       拾取对象id（默认全部数据）
         * @author   BaGuijun (baguijun@163.com)
         * @date     2025-01-13
         */
        void setSensorsPickable(bool pickable, int dataObjId = -1);
        /**
    private:
        /**
         * @brief   构造函数。
         * @param   graphWidget：可视化窗口
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-06-12
         */
        GraphModelProvider(Comp::FITKGraph3DWindowVTK* graphWidget);

        /**
         * @brief   析构函数。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-06-12
         */
        ~GraphModelProvider();

    private:      
        /**
         * @brief   模型（几何）可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-06-12
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_geoObjHash;

        /**
         * @brief   模型（几何）可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-10-28
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_meshObjHash;

        /**
         * @brief   SEA模型节点可视化对象字典。（键为SEA模型数据ID）
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-10-29
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_nodesObjHash;

        /**
         * @brief   SEA子系统梁可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEABeamObjHash;

        /**
         * @brief   SEA子系统壳（板）可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEAShellObjHash;

        /**
         * @brief   SEA子系统声腔可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-04
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEACavityObjHash;

        /**
         * @brief   SEA子系统半无限流体可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-05
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEASemiInfFluidObjHash;

        /**
         * @brief   合并SEA子系统板可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-18
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEAShellsObjHash;

        /**
         * @brief   合并SEA子系统声腔可视化对象字典。
         * @author  ChengHaotian (yeguangbaozi@foxmail.com)
         * @date    2024-11-18
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_SEACavitiesObjHash;
        /**
         * @brief  fe面可视化对象字典
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-31
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_feFaceObjHash;
        /**
         * @brief  fe结构-板可视化对象字典
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-31
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_feShellObjHash;
        /**
         * @brief  fe结构-梁可视化对象字典
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-31
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_feBeamObjHash;
        /**
         * @brief  fe声腔可视化对象字典
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-12-31
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_feAcousticObjHash;
        /**
         * @brief  fe连接器可视化对象字典
         * @author BaGuijun (baguijun@163.com)
         * @date   2025-01-13
         */
        QHash<int, Exchange::FITKAcousticsVTKGraphObject3D*> m_sensorObjHash;

    };
}   // namespace GraphData

#endif // __GRAPHMODELPROVIDER_H__
